<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2018/11/16
 * Time: 15:51
 */

namespace app\modules\dataMapper\controller;

use app\modules\dataMapper\StorageAdapter;
use app\modules\dataMapper\UserMapper;
use app\modules\dataMapper\UserRepository;
use yii\web\Controller;

class DefaultController extends Controller
{
    /**
     * 数据映射器模式示例
     * 数据映射器是一种数据访问层，它执行持久性数据存储（通常是关系数据库）和内存数据表示（域层）之间的数据双向传输。
     * 该模式的目标是保持内存表示和持久数据存储相互独立，并保持数据映射器本身。 该层由一个或多个映射器（或数据访问对象）组成，执行数据传输。
     * 映射器实现的范围有所不同。 通用映射器将处理许多不同的域实体类型，专用映射器将处理一个或几个。
     *
     * @date   2018/11/22
     * @author edmmss
     * @return bool
     */
    public function actionIndex()
    {
        // 因为我本地数据库id等于155有数据，你可以自己修改对应id
        $userId = 155;
        $userInfo = (new UserRepository())->getUserInfo($userId);

        $storage = new StorageAdapter($userInfo);
        $mapper = new UserMapper($storage);
        $user = $mapper->findById($userId);

        var_dump($user);
        var_dump($user->getUsername());

        return true;
    }
}